In typical computer and information processing systems, data needed to execute an instruction may be stored in a memory. The latency of fetching the data from the memory may add to the time required to execute the instruction, thereby decreasing performance. To improve performance, techniques for fetching data before it may be needed have been developed. Such prefetching techniques involve moving the data closer to the processor in the memory hierarchy, for example, moving data from main system memory to a cache, so that if it is needed to execute an instruction, it will be take less time to fetch it.
However, the timing of prefetching is an important consideration. If the prefetch is too late, the data may not be available when needed. If the prefetch is too early, memory bandwidth and cache capacity may be unnecessarily consumed.